package com.rajaev.dtu.tractor.domain.repository.mysql;


import com.rajaev.dtu.tractor.domain.vo.BatteryFaultWarmInfo;
import com.rajaev.dtu.tractor.domain.vo.FaultDetailVo;
import com.rajaev.dtu.tractor.domain.vo.FaultItemVo;
import com.rajaev.dtu.tractor.domain.vo.FaultVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @Created with IDEA
 * @author: tianjie
 * @Date:2019/4/8
 * @Time:17:40
 */
@Repository
@Mapper
public interface FaultDao {

    /**
     * 查询各个车辆的故障数量
     * @return
     */
    List<FaultVo> selectFaults(@Param("vin") String vin, @Param("userId") Integer userId);

    /**
     * 查询所有未结束的故障
     * @return
     */
    List<FaultDetailVo> selectAllNotOveredFaults();

    /**
     * 根据vin查询该设备的未恢复的故障
     * @param vin
     * @return
     */
    List<FaultDetailVo> selectAllNotOveredFaultsByVin(String vin);



    List<FaultDetailVo> selectFaultDetailsByUserId(Integer userId, Date searchBegin, Date searchEnd);

    /**
     * 查询某个用户所在的车队下的故障车的数量
     * @param userId 用户id
     * @return
     */
    int selectFaultNumberWithUserId(@Param("userId") Integer userId);

    /**
     * 查询电池的报警信息
     * @param userId
     * @return
     */
    List<BatteryFaultWarmInfo> selectBatterWarnInfo(@Param("userId") Integer userId);


    /**
     * 根据vin查询故障详情
     * @param batteryId
     * @return
     */
    List<FaultDetailVo> selectFaultDetail(@Param("batteryId") Integer batteryId);

    /**
     * 根据vin查询故障详情
     * @param vinOrPlateNo vin或者车牌号
     * @return
     */
    List<FaultDetailVo> selectFaultDetailByVin(@Param("vinOrPlateNo") String vinOrPlateNo,
                                               @Param("faultLevel") Integer faultLevel,
                                               @Param("searchBegin") Date searchBegin,
                                               @Param("searchEnd") Date searchEnd);





    /**
     * 新增一条故障信息
     * @param faultDetailVo
     */
    int insertFault(FaultDetailVo faultDetailVo);



    /**
     * 修改故障为已经解除
     * @param faultDetailVos
     * @return
     */
    int updateFaultReset(@Param("faultDetailVos") List<FaultDetailVo> faultDetailVos);


    /**
     * 根据错误代码和描述查询
     * @param code
     * @param desc
     * @return
     */
    List<FaultItemVo> selectFaultItem(@Param("code") String code, @Param("desc") String desc);

    /**
     * 修改故障信息
     * @param faultItemVo
     */
    void updateFaultItem(FaultItemVo faultItemVo);
}
